/*
* ajax 请求函数模块
* */

import axios from 'axios'

/**
 * 向外暴露一个函数 ajax
 * @param url 请求路径, 默认为空
 * @param data 请求参数, 默认为空对象
 * @param type 请求方式, 默认为GET
 */
export default function ajax (url = '',  data = {}, type = 'GET') {
  // 返回值: Promise对象 (异步返回的数据是 res.data, 而不是res)
  return new Promise((resolve, reject) => {
    // 利用 axios 异步执行 ajax 请求
    let promise // 这个内部的 promise 用来保存 axios 的返回值(promise对象)
    if (type === 'GET') {
      // 准备 url query 参数数据
      let dataStr = '' // 数据拼接字符串, 将data连接到url
      Object.keys(data).forEach(key =>{
        dataStr += `${key}=${data[key]}&`
      })

      if (dataStr !== '') {
        dataStr = dataStr.substring(0, dataStr.lastIndexOf('&'))
        url = url + '?' + dataStr
      }

      // 发送 GET 请求
      promise = axios.get(url)
    } else if(type === 'POST') {
      // 发送 POST 请求
      promise = axios.post(url, data)
    }

    promise
      .then(res => {
        // 成功回调
        resolve(res.data)
      })
      .catch(err => {
        // 失败回调
        reject(err)
      })
  })
}
